package com._1.message.rabbitMq;

import com._1.message.rabbitMq_order.RabbitMqOrderConfig;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.RabbitListener;

import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class RabbitMqConsumer {

//    @RabbitListener(queues = "testExchange")
//    public void receive(String message) {
//        System.out.println("Received message"+message);
//    }
//
//    @RabbitListener(queues = "queue1")
//    public void receiveMessageFromQueue1(String message) {
//        System.out.println("队列 queue1 收到消息： " + message);
//    }
//
//    @RabbitListener(queues = "queue2")
//    public void receiveMessageFromQueue2(String message) {
//        System.out.println("队列 queue2 收到消息： " + message);
//    }

 //    ack 开启了就是自动回复 设置 ackMode 为 MANUAL 手动回复
    @RabbitListener(queues = RabbitMqOrderConfig.ORDER_QUEUE_NAME,  ackMode = "MANUAL")
    public void receiveOrderMessage(String message) {
        System.out.println("收到订单消息： " + message);
        // 模拟支付逻辑
        System.out.println("处理订单支付...");
        // 如果支付成功，可以在这里处理后续逻辑

    }


    @RabbitListener(queues = RabbitMqOrderConfig.ORDER_QUEUE_NAME,  ackMode = "MANUAL")
    public void receiveOrderMessage(org.springframework.amqp.core.Message message, Channel channel) throws IOException {
        System.out.println("收到订单消息： " +  new String(message.getBody()));
        // 模拟支付逻辑
        System.out.println("处理订单支付...");
        // 如果支付成功，可以在这里处理后续逻辑
        // 如果支付成功，手动确认消息
//        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        // 拒绝消息并发送到死信队列
        // 拒绝消息并发送到死信队列
        channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
    }

    @RabbitListener(queues = RabbitMqOrderConfig.DEAL_QUEUE_NAME)
    public void receiveDeadLetterMessage(String message) {
        System.out.println("收到死信队列消息： " + message);
        // 处理超时订单
        System.out.println("订单超时，进行异常处理...");
    }
}
